package other.for_in;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 不要在foreach循环里进行元素的remove/add操作。<br/>
 * remove元素请使用Iterator方式，如果并发操作，需要对Iterator对象加锁。
 * @author lixiangke
 * @date 2017/11/29
 */
public class TestForIn {
    public static void main(String[] args) {
        // 从集合中移除元素, 错误示例
        List<String> list = new ArrayList<String>();
        list.add("1");
        list.add("2");
        for (String item : list) {
            if ("2".equals(item)) {
                list.remove(item);
            }
        }
        // 上面的循环编译后等价于下面
        /*
        for (Iterator<String> it = list.iterator(); it.hasNext();) {
            String ele = it.next();
            if ("2".equals(ele)) {
                list.remove(ele);
            }
        }
        */

        // // 从集合中移除元素, 正确示例
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String item = iterator.next();
            if ("2".equals(item)) {
                iterator.remove();
            }
        }
    }
}
